#ifndef __PID_H
#define __PID_H

typedef struct {
  float Kp;             // 比例系数
  float Ki;             // 积分系数
  float Kd;             // 微分系数

  float setpoint;       // 目标值
  float measured;       // 当前值

  float error;          // 当前误差
  float last_error;     // 上一次误差
  float integral;       // 积分项
  float derivative;     // 微分项

  float output;         // PID 输出
  float output_max;     // 输出最大值
  float output_min;     // 输出最小值
} PID_t;

/**
 * @brief 初始化 PID 参数
 */
void PID_Init(PID_t *pid, float kp, float ki, float kd, float out_min, float out_max);

/**
 * @brief 计算 PID 输出（增量式或位置式）
 */
float PID_Compute(PID_t *pid, float setpoint, float measured);

#endif
